February 04, 2001 ----------------- - Finally got alt-tabbing to behave nicely. Still minor issues with the main menu, but it's at least much better than it was. January 28, 2001 ---------------- - There's now only one place where a window_manager is instantiated. There are no functions which take a window_manager parameter anymore. - Well, in the process of adding changes necessary to handle recovery from alt-tabbing away from Abuse (which is why I was updating jwindow::redraw()), the entire windowing system is getting an overhaul. It's gonna be sweet when I'm done, though. - jwindow::redraw() has been changed to a virtual function requiring no parameters. This'll make it much easier to implement special specific- purpose windows. - renamed wm[] array in dev.cpp to WinMenus so that it doesn't have a name collision with the satic wm singleton. - Starting work on singleton code; will get rid of all references to an arbitrary window_manager* because there's only going to be one, and it's not ever going to change. - Got rid of X-ish "control is only active when mouse is over it" Now you've gotta click on a control to make it take focus, and you can hit tab to move between controls even when one isn't currently selected. - Fixed right/down arrow display in selection boxes... Finally. That bug had been eluding me forever. (Accidentally Lock()ed again at the end of drawing instead of UnLock()ing ... Oops) January 27, 2001 ---------------- - I think I've figured out why the automap is crashing the engine sometimes. When I'm done with other stuff, I'll take a look at fixing it. - Got fRaBs' uninstall working. I guess "company name" is required before the uninstaller can initialize. Dumb limitation, if you ask me... - Moving username.lsp, gamename.lsp, and some other LISP files out of /addon/deathmat into /config. Adding more saved configuration stuff as well. - Added net_configuration::save() function - Modifying deathmatch startup code to look for -a switch, allowing addons to redefine deathmatch settings. - Added net_configuration::load() function - fixed info_field->find() function - fixed button_box->press_button() function - Also found the foretile corruption display in the editor. Will take a look at it soon -- for now just close the window and re-open it and it'll be okay. File notes: changed: / abuse.lsp /lisp people.lsp startup.lsp /addon/deathmat deathmat.lsp dstartup.lsp /addon/fRaBs !new-> netstart.lsp /addon/fRaBs/lisp startup.lsp /addon/fRaBs/deathmat deathmat.lsp dstartup.lsp January 24, 2001 ---------------- - Engine now deletes lcachexx.tmp on exit, and doesn't ever create end.mem in the release build. - Working on Shareware/Retail/fRaBs InstallShield packages. Can't get fRaBs' uninstall to start correctly... January 23, 2001 ---------------- - Finally fixed the sound so that Abuse doesn't crash when it can't find a sound card... - Fixed game_getter() so that lbreak() works. - Removed *all* exit() calls and replaced with WriteErr(). Abuse should *never* shut down without giving a reason anymore. If it does, I've got an error somewhere that isn't being taken into account. - Fixed fRaBs so that it'll work within /addon/fRaBs with the -a switch. Now I just need to tell Justin how he needs to do things from now on... ;) January 19, 2001 ---------------- - I actually added this a while ago, but for anyone who's interested, the GUID I'm using to create DirectPlay sessions is: {7FAABB28-D1AB-4b3b-957C-58A124E03542} Not that anyone'll probably need this, but who knows? - Added -module switch for specifying "add-on modules," which will be a more complete version of the -a switch. - Tweaked with the re-worked DPlay stuff and it's much better now. Still works, and is far prettier. January 18, 2001 ---------------- - The entire Abuse engine now runs inside its own thread, allowing WinMain() to do event processing -- Now alt-tab should *always* work, even in game loops where it previously wasn't polling for Windows events. - Re-worked some DirectPlay stuff to allow it to start a new network game after it's done with another... Not the best solution, but it works. - DirectInput routines now run inside their own thread, as part of an effort to make the entire engine multi- threaded. Currently working on moving Get/Translate/ DispatchMessage() out of the event handling code and back into WinMain() where they belong. - also had an idea to improve mouse wheel weapon switching that works great except for one tiny problem. I doubt if anyone'll encounter this problem, tho'. If you find it, and it's a major problem, let me know and I'll see if I can get to the bottom of it. - worked on the lighting altorithm. Got a 100% speedup in one of the inner loops, according to the profiler. Lighting now takes about 10% less processor time when using hw acceleration. Could still be sped up, though. The 32-bit reads are faster (and fewer), but they're still not guaranteed to be on a DWORD boundary, so there's still a potential performance hit. I also need to re-work the lighting table's functionality to get rid of another good portion of the 8-bit operations. January 17, 2001 ---------------- - fixed blinking player location dot not displaying in automap. - finally completely fixed the far right/bottom lines not being drawn problem. Really bizarre solution -- I'm not entirely convinced that the problem doesn't lie elsewhere -- but it's fixed. - weaning functions from image::width() to use image::Pitch instead... DirectDraw aligns all scan lines on DWORD boundaries, so width() doesn't necessarily equal bytes/scan line. - Right now I'm having a problem with system vs. local video memory... If I create any of my surfaces in system memory, the hardware acceleration takes a serious hit on non-AGP systems. If I create surfaces (one in particular representing the offscreen buffer) in local video memory, any software rendering routines (especially lighting) take serious performance hits. Hardware acceleration blazes through all of Abuse's drawing routines. I can get upwards of 120 fps on my computers with delays turned off ... But more than 50% of all processing time is spent in the lighting routine. When using system memory, lighting takes about 15% of the processing time... Methinks I'll have to do some work on the lighting algorithm to make it more 32-bit friendly... January 10, 2001 ---------------- - fixed bug that made Abuse think that keys were being pressed when they were released, and vice-versa. It was only by an incredible coincidence that the DirectInput code was working at all before this. Now everything (should) work. January 08, 2001 ---------------- Code Notes: - changing file_manager::remote_file::unbuffered_read() so that it won't overrun the read buffer anymore -- ever. - trying to find a bug that's preventing files larger than 8k from transferring over the network correctly (only a problem in the debug executable ... for now. has potential to make things really bad later on.) January 07, 2001 ---------------- - Added automap, though it's crashed a test machine twice, so I removed it again. - Built InstallShield package for shareware install - Added mouse wheel support for changing weapons (not perfect yet) - Other stuff, though I've forgotten what. January 06, 2001 ---------------- - DirectInput for mouse works. Mouse sensitivity can be changed, but needs a user interface still. - Modified do_title() routine to no longer be hard-coded for the original "intro" string ... Any string should now be shown in its entirety. Mouse button click will also exit the title screen. - Started looking at LISP processing code to see about adding functions that'll allow LISP scripts to do intro/title-type stuff. (Draw pictures, show scrolling text, etc.) - Fixed editor map mode ... again. Forgot that I'd lost that fix when I had a mini HD crash. - Framerate is no longer "game tick" based. The game tick runs at a fixed rate of 15Hz, and all game objects run at this rate. This made the mouse move kinda choppy, (as Bill pointed out) even if your computer is capable of framerates much higher. Screen is now updated as fast as possible, and game ticks still happen at 15Hz. Interesting note, though: all I've got to do to increase or decrease the speed of the game is to change a floating-point value to something other than 15 ... Throw a user interface in for it, and "Turbo-mode Abuse, anyone?" It's amazing how much I've been able to tinker with now that the DirectPlay code is more or less done... It's also amazing how much of this engine's capabilities went unused by the original Abuse... January 05, 2001 ---------------- - Now using DirectInput for keyboard input. Faster, better. Doesn't rely on Windows messaging. No more accidentally hitting the Windows key when reaching for Ctrl, Josh... - Working on DirectInput for mouse input. Will be faster, better. Will support changing sensitivity and more buttons. (5-button/wheel mouses will be more useful in Abuse, eventually...) January 04, 2001 ---------------- - Sound should never crash the Sound Server anymore (thus crashing Abuse) - Creating DirectPlay sessions with a much higher player limit to allow for more simultaneous "virtual connections" that I make with each client. Fixes "Can't create player" errors. January 03, 2001 ---------------- - My name's in the startup console view now... :) - Adding console view; throwing out text stat_man entirely - preload.lsp now required. This file contains startup configuration for game fonts, palette, and window stuff. Code Notes: - event_handler (eh) is now created only once immediately after the video mode is initialized. Same with the status_manager (stat_man). They're both destroyed when the program exits. - fixed up WriteErr macro - moving exit(x)'s into WriteErr, which shuts down DirectDraw and shows a message box describing the error. - changed sprite::change_visual() to copy the image and then unlink it. jwindow::jwindow unlinks its screen. Did this to keep them from getting destroyed when lisp is reloaded. - modified NF_set_file_server(net_address *addr) to use dprintf for console reporting. - moving most printf's and fprintf's into dprintf to give the Windows port a form of output for users to see as progress indication and/or error messages. January 01, 2001 ---------------- - Networking supports more than 2 players December 26, 2000 ----------------- - Networking is much better now. December 24, 2000 ----------------- - Fixed extra line of garbage being drawn on display (really!) - Networking works December 9, 2000 ---------------- - Fixed map display problem - Added experimental logic to the sound server ... It now tries to keep the number of playing sounds managed, so hopefully it'll sound better. - I've set the sound to play at 44.1 khz, 16-bit which helps a lot even without sound management. Eventually this'll be user-configurable, but for now it's hard-coded. - And yet another improvement in the sound department -- it's now in *stereo*! If something's on your left, you'll hear it from the left speaker, and vice versa. This took me *exactly* one line of code to implement. The framework already had support for panning, it just wasn't used for some reason. - Command line switches work now. Try -size (and give it a usable resolution, because it does no checking and will just die if it can't switch modes)... All other switches should work, too. Let me know if any don't. - Fixed minor graphical glitch that made garbage show on the far-right column and bottom scan line of the monitor. (I think.) - Threw out all of my old DirectPlay code and am starting over. I've got a better idea of what it needs to do now, so I should be able to get a slightly more elegant solution in place than the one I was working on before. (also began reading up on Winsock 2 APIs, for possibility of supporting non-Windows players) Known Bugs: - Once, when I was playing around with the editor, the foreground tile window filled itself with garbage. I closed it and re-opened it and it was fine. I couldn't reproduce it again. - Also, once, the debugger found some bad memory allocations in weird places, but it didn't affect the game, and I can't get it to do it again.